package com.zoe.onelink.mybatis.base.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>标题: </p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2021</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2021-07-15
 */
public interface IBaseDao<Entity> extends BaseMapper<Entity> {

    /**
     * 批量插入
     *
     * @param itemList 插入的数据
     * @return 成功插入的数量
     */
    int insertBatch(List<Entity> itemList);

    /**
     * 批量插入
     *
     * @param itemList  插入的数据
     * @param batchSize 每次插入的数量
     * @return 成功插入的数量
     */
    default int insertBatch(List<Entity> itemList, int batchSize) {
        if (itemList == null) {
            return 0;
        }
        if (itemList.size() <= batchSize) {
            return insertBatch(itemList);
        }
        int forCount = itemList.size() / batchSize;
        for (int i = 0; i < forCount; i++) {
            List<Entity> subItems = itemList.subList(i * batchSize, (i + 1) * batchSize);
            insertBatch(subItems);
        }
        return itemList.size();
    }

    /**
     * 模糊查询 (zoe-essential 功能迁移)
     */
    List<Entity> searchList(@Param("query") String query, @Param(Constants.WRAPPER) Wrapper<Entity> queryWrapper);

    /**
     * 模糊分页查询(zoe-essential 功能迁移)
     */
    <E extends IPage<Entity>> E searchPage(@Param("query") String query, E page, @Param(Constants.WRAPPER) Wrapper<Entity> queryWrapper);

}
